home *** CD-ROM | disk | FTP | other *** search
/ SGI Cosmo Software 1997 May / SGI Cosmo Software 1997 May.iso / dist / dmedia_eoe.idb / usr / include / sys / hdsp_kern.h.z / hdsp_kern.h
Text File  |  1997-05-23  |  7KB  |  177 lines

  1. /**************************************************************************
  2.  *                                      *
  3.  *          Copyright (C) 1988, Silicon Graphics, Inc.          *
  4.  *                                      *
  5.  *  These coded instructions, statements, and computer programs  contain  *
  6.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  7.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  8.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  9.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  10.  *                                      *
  11.  **************************************************************************/
  12. #ident "$Header: /hosts/clyde/depot/dmedia/dmedia_webforce1.1/audio/kern/sys/RCS/hdsp_kern.h,v 1.16 1994/09/08 00:48:10 shankar Exp $"
  13.  
  14. /***************************************************************************
  15.  *
  16.  *  hdsp_kern.h - Hollywood DSP device driver internal structs.
  17.  *  (programmer visible hdsp structs are in hdsp.h).
  18.  *
  19.  ****************************************************************************/
  20.  
  21. /* 
  22.  * The following struct describes what the hdsp driver knows about a host ring
  23.  * buffer.  
  24.  */
  25. typedef struct hrb_s {
  26.     ulong *vheader;     /* Virtual address of the header part of the hrb     */
  27.     caddr_t pheader;     /* Physical address of the header part of the hrb    */
  28.     void *vdata;     /* Virtual address of the data part of the hrb       */
  29.     caddr_t pdata;     /* Physical address of the data part of the hrb      */
  30.     caddr_t vaddr;     /* Virtual address of the data in user's addr space  */
  31.     int nlocs;         /* Number of locations in the data part of the hrb   */
  32.     int nbytes;         /* Number of bytes in the hrb, including the header  */
  33.     int minordev;     /* Minor device number associated with this hrb.     */
  34.     void (*hrb_isr)();     /* Pointer to the interrupt service routine.         */
  35.     struct hrb_s *next;  /* Pointer to the next free or allocated hrb struct  */
  36.     char type;         /* Type of hrb (TOMIPS, FROMMIPS, FOLDED, etc.)      */
  37.     struct pollhead pq; /* Poll head (for select, poll)                     */
  38.     char state;         /* State of the hrb.                                 */
  39.     char rbnum;         /* Ring Buffer Number                                */
  40.     char dspnotified;     /* True if the DSP has been notified of the hrb      */
  41.     int maplen;         /* Length of the mmaped region                       */
  42. } hrb_t;
  43.  
  44. /* 
  45.  * The following defines indicate the state of a host ring buffer.  
  46.  */
  47. #define HRB_WAITING 1
  48.  
  49. /* 
  50.  * The following flags controll the behavior of kernel writes to the dsp 
  51.  *    -- needed by streams drivers to prevent sleeping 
  52.  */
  53. #define HDSPSLEEPOK 0
  54. #define HDSPNOSLEEP 1
  55.  
  56. /* 
  57.  * The following macros are convenient ways to query the type of a host ring
  58.  * buffer. 
  59.  */
  60. #define HRB_ISFOLDED(x)        (((x)&HRB_FOLDED)!=0)
  61. #define HRB_ISFROMMIPS(x)    (((x)&HRB_FROMMIPS)!=0)
  62. #define HRB_ISEXTEND(x)        (((x)&HRB_EXTEND)!=0)
  63. #define HRB_ISUSERSPACE(x)    (((x)&HRB_USERSPACE)!=0)
  64.  
  65. #define HRB_ISUNFOLDED(x)    (((x)&HRB_FOLDED)==0)
  66. #define HRB_ISTOMIPS(x)        (((x)&HRB_FROMMIPS)==0)
  67. #define HRB_ISNOEXTEND(x)    (((x)&HRB_EXTEND)==0)
  68. #define HRB_ISKERNELSPACE(x)    (((x)&HRB_USERSPACE)==0)
  69.  
  70. /* 
  71.  * limits 
  72.  */
  73. #define HDSPMEMORYHI    65536    /* In DSP Words.           */
  74. #define HDSPMEMORYLOW    32768    /* In DSP Words.           */
  75. #define MAXHRB          30      /* maximum number of hrb's */
  76.  
  77. /* 
  78.  * The following struct describes a Hollywood DSP on a HPC1 controller.  
  79.  */
  80. typedef struct hdsp_s {
  81.     volatile unsigned int   state;       /* DSP state:for sleep/wakeup*/
  82.     volatile unsigned long *dmawdcount;  /* DMA transfer size (16)    */
  83.     volatile unsigned long *gioaddl;     /* GIO-bus address LSB (16)  */
  84.     volatile unsigned long *gioaddm;     /* GIO-bus address MSB (16)  */
  85.     volatile unsigned long *pbusadd;     /* Pbus address (16)         */
  86.     volatile unsigned long *dmactl;      /* DMA control (2)           */
  87.     volatile unsigned long *handtx;      /* handshake tx (16)         */
  88.     volatile unsigned long *handrx;      /* handshake rx (16)         */
  89.     volatile unsigned long *cintstat;    /* CPU interrupt status (3)  */
  90.     volatile unsigned long *cintmask;    /* CPU interrupt masks (3)   */
  91.     volatile unsigned long *miscsr;      /* misc control,status (8)   */
  92.     volatile unsigned long *burstctl;    /* ballistics register (16)  */
  93.     volatile unsigned long *memory;      /* DSP memory                */
  94.     hrb_t *cmdin;                         /* Commands from the DSP     */
  95.     hrb_t *cmdout;                       /* Commands to the DSP       */
  96.     int input_source;                    /* audio parameter           */
  97.     int left_input_atten;                /* audio parameter           */
  98.     int right_input_atten;               /* audio parameter           */
  99.     int left2_input_atten;               /* audio parameter           */
  100.     int right2_input_atten;              /* audio parameter           */
  101.     int input_rate;                      /* audio parameter           */
  102.     int output_rate;                     /* audio parameter           */
  103.     int left_speaker_gain;               /* audio parameter           */
  104.     int right_speaker_gain;              /* audio parameter           */
  105.     int speaker_mute;                    /* audio parameter           */
  106.     int inputrbcount;     /* Count of input (to mips) ring buffers    */
  107.     int outputrbcount;    /* Count of output (from mips) ring buffers */
  108. } hdsp_t;
  109.  
  110. /*
  111.  * offsets into shared DSP memory
  112.  */
  113. #define HDSP_MEM_MONITOR_FLAG     24  /* passthru enable/disable */
  114. #define HDSP_MEM_AUDIORB_ERROR    28  /* base addr for audio rb error flags */
  115. #define HDSP_MEM_AUDIO0_ERROR     28  /* audio 0 error flag */
  116. #define HDSP_MEM_AUDIORB_TYPE     32  /* error types */
  117. #define HDSP_MEM_AUDIORB_LENGTH   36  /* length of errors */
  118. #define HDSP_MEM_AUDIORB_LOC_ADDR 40  /* locations of errors */
  119.  
  120. #define HDSP_MEM_LEFT_MONITOR_ATTEN    48   /* left channel atten factor */
  121. #define HDSP_MEM_RIGHT_MONITOR_ATTEN   49   /* right channel atten factor */
  122.  
  123. /* 
  124.  * The following defines indicate the state of the hdsp 
  125.  */
  126. #define HDSP_INITIALIZING 1
  127.  
  128. /* 
  129.  * XXX BOGUS 
  130.  * The following procedures place and remove data to/from host ring buffers 
  131.  /
  132. void hrb_dsptomipsfolded_isr(hrb_t*);
  133. void hrb_dsptomipsunfolded_isr(hrb_t*);
  134. void hrb_mipstodspfolded_isr(hrb_t*);
  135. void hrb_mipstodspunfolded_isr(hrb_t*);
  136.  
  137. void hrb_user_dsptomipsfolded_isr(hrb_t*);
  138. void hrb_user_dsptomipsunfolded_isr(hrb_t*);
  139. void hrb_user_mipstodspfolded_isr(hrb_t*);
  140. void hrb_user_mipstodspunfolded_isr(hrb_t*);
  141.  */
  142. /* 
  143.  * Hollywood DSP commands. 
  144.  */
  145. #define DSPCMD_CREATEHRB        1
  146. #define DSPCMD_ACQUIRE_SAMPLERB        4
  147. #define DSPCMD_FREE_SAMPLERB        5
  148. #define DSPCMD_CHANGE_SAMPLE_RB        6
  149. #define DSPCMD_CHANGE_AUDIO_PARMS    7
  150.  
  151. /*
  152.  * Client locks state 
  153.  */
  154. #define HDSP_CLIENT_UNOPENED    (-2)
  155. #define HDSP_CLIENT_OPENED    (-1)
  156.  
  157. /* 
  158.  * Priority that the DSP blocks interrupts at. 
  159.  */
  160. #define splhdsp()    splhi()
  161.  
  162. /* 
  163.  * HPC1 CINTMASK interrupt mask register bits 
  164.  *    1 => enable interrupt source, 0 => disable
  165.  */
  166. #define HDSP_CINTMASK_DMA       1   /* end of DMA             */
  167. #define HDSP_CINTMASK_HANDTX    2   /* DSP writes to HANDTX   */
  168. #define HDSP_CINTMASK_HANDRX    4   /* DSP reads from HANDRX  */
  169.  
  170. /* 
  171.  * Configuration constants 
  172.  */
  173. #define CMDBUFSIZE   300
  174. #define REPLYBUFSIZE 20
  175. #define MAXHDSPCLIENTS    12
  176. #define HDSPSPRI (PZERO-1)
  177.